package com.suiwei.advanced.collection;

import java.util.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.jupiter.api.Test;

@Slf4j
public class UtilsDemo {
    //========================可变参数
    @Test
    void argsTest() {
        getSum(1);
        getSum(1, 2);
        getSum(new int[] {1,2,3});//可变参数，本质是个数组
    }
    //一个形参列表中可变参数只能有一个，且必须放在形参列表的最后面
    private int getSum(int... nums){
        int result=0;
        for (int num :nums ) {
            result+=num;
        }
        return  result;
    }

    //======================-集合工具类
    //Collections:java.util.Collections
    @Test
    void CollectionsTest() {
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"a","b","c");//批量添加
        Collections.binarySearch(list,"a");//二分查找；返回元素的索引
        Collections.shuffle(list);//洗牌，把顺序打乱
        Collections.max(list);//最大值
        Collections.min(list);//最小值
        Collections.swap(list,0,1);//交换；对集合中的1,2号索引的数据进行交换
        Collections.sort(list);//默认排序
        Collections.sort(list,new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return 0;
            }
        });//自定义排序
        Collections.sort(list,(o1,o2)->o2.compareTo(o1));//自定义排序 lambda写法
    };



    //CollectionUtils一般使用apache包下的， 需要在pom文件中引入
    @Test
    void collectionUtilsTest() {
        // 判断是否为空
        log.info(String.valueOf(CollectionUtils.isEmpty(null))); // true
        log.info(String.valueOf(CollectionUtils.isEmpty(new ArrayList()))); // true　　
        // 并集
        String[] arrayA = new String[]{"A", "B", "C"};
        String[] arrayB = new String[]{"B", "C", "D", "D"};
        List<String> listA = Arrays.asList(arrayA);
        List<String> listB = Arrays.asList(arrayB);
        log.info(ArrayUtils.toString(CollectionUtils.union(listA, listB))); // [A, B, C, D, D]
        // 交集
        log.info(ArrayUtils.toString(CollectionUtils.intersection(listA, listB)));
        // 差集
        log.info(ArrayUtils.toString(CollectionUtils.subtract(listA, listB)));
    }

}
